package com.cmc.cloud.cmclink.doc.service.impl;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.cmc.cloud.cmclink.doc.constants.errorconstant.SpecialCargoOdoErrorCodeConstants;
import com.cmc.cloud.cmclink.doc.convert.SpecialCargoOdoConvert;
import com.cmc.cloud.cmclink.doc.entity.SpecialCargoOdoDO;
import com.cmc.cloud.cmclink.doc.mapper.SpecialCargoOdoMapper;
import com.cmc.cloud.cmclink.doc.service.SpecialCargoOdoService;
import com.cmc.cloud.cmclink.doc.vo.specialcargoodovo.SpecialCargoOdoCreateReqVO;
import com.cmc.cloud.cmclink.doc.vo.specialcargoodovo.SpecialCargoOdoPageReqVO;
import com.cmc.cloud.cmclink.doc.vo.specialcargoodovo.SpecialCargoOdoUpdateReqVO;
import com.cmes.framework.common.exception.util.ServiceExceptionUtil;
import com.cmes.framework.common.pojo.PageResult;
import com.cmes.framework.mybatis.core.query.LambdaQueryWrapperX;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;

import javax.annotation.Resource;
import java.util.Collection;
import java.util.List;


/**
 * 特种货审批odo Service 实现类
 *
 * @author 集运管理员
 */
@Service
@Validated
public class SpecialCargoOdoServiceImpl implements SpecialCargoOdoService {

    @Resource
    private SpecialCargoOdoMapper specialCargoOdoMapper;

    @Override
    public void createSpecialCargoOdo(SpecialCargoOdoCreateReqVO createReqVO) {
        // 插入
        SpecialCargoOdoDO specialCargoOdo = SpecialCargoOdoConvert.INSTANCE.convert(createReqVO);
        specialCargoOdoMapper.insert(specialCargoOdo);
    }

    @Override
    public void updateSpecialCargoOdo(SpecialCargoOdoUpdateReqVO updateReqVO) {
        // 校验存在
        validateSpecialCargoOdoExists(updateReqVO.getId());
        // 更新
        SpecialCargoOdoDO updateObj = SpecialCargoOdoConvert.INSTANCE.convert(updateReqVO);
        specialCargoOdoMapper.updateById(updateObj);
    }

    @Override
    public void deleteSpecialCargoOdo(Long id) {
        // 校验存在
        validateSpecialCargoOdoExists(id);
        // 删除
        specialCargoOdoMapper.deleteById(id);
    }

    private void validateSpecialCargoOdoExists(Long id) {
        if (specialCargoOdoMapper.selectById(id) == null) {
            throw ServiceExceptionUtil.exception(SpecialCargoOdoErrorCodeConstants.SPECIAL_CARGO_ODO_NOT_EXISTS);
        }
    }

    @Override
    public SpecialCargoOdoDO getSpecialCargoOdo(Long id) {
        LambdaQueryWrapperX<SpecialCargoOdoDO> queryWrapperX = new LambdaQueryWrapperX<SpecialCargoOdoDO>()
                .eq(SpecialCargoOdoDO::getCntrId, id);
        return specialCargoOdoMapper.selectOne(queryWrapperX);
    }

    @Override
    public List<SpecialCargoOdoDO> getSpecialCargoOdoList(Collection<Long> ids) {
        return specialCargoOdoMapper.selectBatchIds(ids);
    }

    @Override
    public PageResult<SpecialCargoOdoDO> getSpecialCargoOdoPage(SpecialCargoOdoPageReqVO reqVO) {
        IPage<SpecialCargoOdoDO> page = Page.of(reqVO.getPageNo(), reqVO.getPageSize());

        IPage<SpecialCargoOdoDO> result = specialCargoOdoMapper.selectPageList(page, reqVO);
        return new PageResult<SpecialCargoOdoDO>(result.getRecords(), result.getTotal());
    }
}
